#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <math.h>
#include <algorithm>
#include <string>
#include <stack>
using namespace std;
 struct ListNode {
         int val;
         ListNode *next;
         ListNode(int x) : val(x), next(NULL) {}
     };
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    if(l2==nullptr)return l1;
    if(l1== nullptr)return l2;
    if(l1->val<l2->val){
        l1->next=mergeTwoLists(l1->next,l2);
        return l1;
    }else{
        l2->next=mergeTwoLists(l1,l2->next);
        return l2;
    }
}

int main(){
    ListNode* temp;
    ListNode* a1=new ListNode(1);
    temp=a1;
    temp->next=new ListNode(2);
    temp=temp->next;
    temp->next=new ListNode(4);

    ListNode* a2=new ListNode(1);
    temp=a2;
    temp->next=new ListNode(3);
    temp=temp->next;
    temp->next=new ListNode(4);

    ListNode*result=mergeTwoLists(a1,a2);
    while(result!= nullptr){
        cout<<result->val<<",";
        result=result->next;
    }
    return 0;
}